package main

import (
	"context"
	"fmt"
	"gobcos/src/accounts/abi/bind"
	"gobcos/src/client"
	"gobcos/src/common"
	"gobcos/src/crypto"
	"gobcos/src/fiscotest/test" // for demo
	"log"
)
//修改合约，set方法，并查看修改结果
func main4() {
	groupID := uint(1)

	client, err := client.Dial("http://192.168.136.129:8545", groupID)
	if err != nil {
		log.Fatal(err)
	}

	// 加载这个合约
	address := common.HexToAddress("0xf17895770669958e9aa0e55c800377bd75b87ef0") // 0x0626918C51A1F36c7ad4354BB1197460A533a2B9
	//因为要建立这个合约的实例，所以导入test文件夹，直接 文件夹名.New文件名即可。
	instance, err := test.NewTest(address, client)
	if err != nil {
		log.Fatal(err)
	}
	//因为是set方法，改变了这个合约的内容，fisco必须要知道是哪个用户改的，此处填入生成的私钥
	privateKey, err := crypto.HexToECDSA("145e247e170ba3afd6ae97e88f00dbc976c2345d511b0f6713355d19d8b80b58") // 145e247e170ba3afd6ae97e88f00dbc976c2345d511b0f6713355d19d8b80b58
	if err != nil {
		log.Fatal(err)
	}
	auth := bind.NewKeyedTransactor(privateKey)
	tx, err := instance.Set(auth, "golang编辑器第五次调用合约的set！", "哈哈哈")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("tx sent: %s\n", tx.Hash().Hex())
	// wait for the mining
	receipt, err := bind.WaitMined(context.Background(), client, tx)
	if err != nil {
		log.Fatalf("tx mining error:%v\n", err)
	}
	fmt.Printf("transaction hash of receipt: %s\n", receipt.GetTransactionHash())
	// 查看set调用后的结果
	opts := &bind.CallOpts{From: common.HexToAddress("0xf17895770669958e9aa0e55c800377bd75b87ef0")} // 0xFbb18d54e9Ee57529cda8c7c52242EFE879f064F
	result, err := instance.Get(opts)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("返回的结果：" + result) // "bar"
}
